"""
评价代码（算法 - 解决问题的方法）的好坏，主要有两个指标：
~ 时间指标 ---> 渐近时间复杂度 ---> O(n) / O(n*n)
~ 空间指标 ---> 渐近空间复杂度
"""


def seq_search(items, key):
    """顺序查找 ---> O(n) ---> 线性时间复杂度"""
    for index, item in enumerate(items):
        if item == key:
            return index
    return -1


def bin_search(items, key):
    """二分查找（折半查找）---> O(log_2 n) ---> 对数时间复杂度"""
    start, end = 0, len(items) - 1
    while start <= end:
        mid = (start + end) // 2
        if key > items[mid]:
            start = mid + 1
        elif key < items[mid]:
            end = mid - 1
        else:
            return mid
    return -1


def main():
    items = [23, 34, 45, 56, 67, 78, 89]
    print(seq_search(items, 23))
    print(seq_search(items, 89))
    print(bin_search(items, 45))
    print(bin_search(items, 50))


if __name__ == '__main__':
    main()
